// 1. 引入express
// const { response } = require('express'); 报错
const { request, response } = require('express');
const express = require('express');

// 2. 创建应用对象
const app = express();

// 3. 创建路由规则
// request是对请求报文的封装
// response是对响应报文的封装

app.get('/server', (request, response)=>{
// 设置响应头，设置允许跨域
response.setHeader('Access-Control-Allow-Origin', '*');
// 设置响应体
response.send('HELLO AJAX');
});

     // 可以接收任意类型的HTTP请求
app.all('/server', (request, response)=>{
  // 设置响应头，设置允许跨域
  response.setHeader('Access-Control-Allow-Origin', '*');
  // 响应头
  response.setHeader('Access-Control-Allow-Headers','*');
  // 设置响应体
  response.send('HELLO AJAX POST');
  });

     // 可以接收任意类型的HTTP请求
app.all('/json-server', (request, response)=>{
  // 设置响应头，设置允许跨域
  response.setHeader('Access-Control-Allow-Origin', '*');
  // 响应头
  response.setHeader('Access-Control-Allow-Headers','*');
  // 响应数据
  const data = {
    name:'zane'
  };
  // 对象的字符串转换
  let str = JSON.stringify(data);
  // 设置响应体
  response.send(data);  // 参数只能是字符串和Buffer
  });

     // 针对IE缓存规则
  app.get('/ie', (request, response)=>{
    // 设置响应头，设置允许跨域
    response.setHeader('Access-Control-Allow-Origin', '*');
    // 设置响应体
    response.send('HELLO IE - 2');
    });

     // 延时响应
    app.get('/delay', (request, response)=>{
      // 设置响应头，设置允许跨域
      response.setHeader('Access-Control-Allow-Origin', '*');
      // 增加定时器
      setTimeout(() => {
      // 设置响应体
      response.send('延时响应');
      }, 3000)
});

     // jQuery服务
    app.all('/jQuery-server', (request, response)=>{
      // 设置响应头，设置允许跨域
      response.setHeader('Access-Control-Allow-Origin', '*');
      response.setHeader('Access-Control-Allow-Headers','*');
      // 设置响应体
      // response.send('Hello jQuery AJAX');
      const data = {name: 'Zane'};
      response.send(JSON.stringify(data));
      });


      // axios 服务
    app.all('/axios-server', (request, response)=>{
      // 设置响应头，设置允许跨域
      response.setHeader('Access-Control-Allow-Origin', '*');
      response.setHeader('Access-Control-Allow-Headers','*');
      // 设置响应体
      // response.send('Hello jQuery AJAX');
      const data = {name: 'Zane'};
      response.send(JSON.stringify(data));
      });

      // fetch 服务
    app.all('/fetch-server', (request, response)=>{
      // 设置响应头，设置允许跨域
      response.setHeader('Access-Control-Allow-Origin', '*');
      response.setHeader('Access-Control-Allow-Headers','*');
      // 设置响应体
      // response.send('Hello jQuery AJAX');
      const data = {name: 'Zane'};
      response.send(JSON.stringify(data));
      });

      // jsonp 服务
    app.all('/jsonp-server',(request, response) => {
      // response.send('console.log("hello jsonp")')
      const data = {
        name: 'Zane'
      };
      // 数据转化为字符串
      let str = JSON.stringify(data);
      // 返回结果
      response.end(`handle(${str})`);
    });

      // 检测用户名是否存在
      app.all('/check-username',(request, response) => {
        // response.send('console.log("hello jsonp")')
        const data = {
          exist: 1,
          msg: '用户名已经存在'
        };
        // 数据转化为字符串
        let str = JSON.stringify(data);
        // 返回结果
        response.end(`handle(${str})`);
      });

      app.all('/jquery-jsonp-server',(request, response) => {
        // response.send('console.log("hello jsonp")')
        const data = {
          name:'Zane',
          city: ['Suzhou', 'Shanghai', 'Nanjin']
        };
        // 数据转化为字符串
        let str = JSON.stringify(data);

        // 接收 callback 参数
        let cb = request.query.callback;

        // 返回结果
        response.end(`${cb}(${str})`);

      });

      app.all('/cors-server', (request, response)=>{
      // 设置响应头
      response.setHeader("Access-Control-Allow-Origin", "http://127.0.0.1:5500");
      response.setHeader("Access-Control-Allow-Headers", "*");
      response.setHeader("Access-Control-Allow-Method", "*");
      response.send('hello CORS');
      })
// 4. 监听端口   启动HTTP服务  有一个回调函数形参
app.listen(8000, ()=>{
  console.log("服务启动，8000端口监听中...");
});